home *** CD-ROM | disk | FTP | other *** search
/ QuickTime 2.0 Developer Kit / QuickTime 2.0 Developer Kit.iso / mac / MAC / Programming Stuff / Interfaces / PInterfaces / ColorPicker.p < prev    next >
Encoding:
Text File  |  1994-11-11  |  11.3 KB  |  453 lines  |  [TEXT/MPS ]

  1. {
  2.      File:        ColorPicker.p
  3.  
  4.      Copyright:    © 1984-1994 by Apple Computer, Inc.
  5.                  All rights reserved.
  6.  
  7.      Version:    Universal Interfaces 2.0a3  ETO #16, MPW prerelease.  Friday, November 11, 1994. 
  8.  
  9.      Bugs?:        If you find a problem with this file, send the file and version
  10.                  information (from above) and the problem description to:
  11.  
  12.                      Internet:    apple.bugs@applelink.apple.com
  13.                      AppleLink:    APPLE.BUGS
  14.  
  15. }
  16.  
  17. {$IFC UNDEFINED UsingIncludes}
  18. {$SETC UsingIncludes := 0}
  19. {$ENDC}
  20.  
  21. {$IFC NOT UsingIncludes}
  22.  UNIT ColorPicker;
  23.  INTERFACE
  24. {$ENDC}
  25.  
  26. {$IFC UNDEFINED __COLORPICKER__}
  27. {$SETC __COLORPICKER__ := 1}
  28.  
  29. {$I+}
  30. {$SETC ColorPickerIncludes := UsingIncludes}
  31. {$SETC UsingIncludes := 1}
  32.  
  33.  
  34. {$IFC UNDEFINED __QUICKDRAW__}
  35. {$I Quickdraw.p}
  36. {$ENDC}
  37. {    Types.p                                                        }
  38. {        ConditionalMacros.p                                        }
  39. {    MixedMode.p                                                    }
  40. {    QuickdrawText.p                                                }
  41.  
  42. {$IFC UNDEFINED __WINDOWS__}
  43. {$I Windows.p}
  44. {$ENDC}
  45. {    Memory.p                                                    }
  46. {    Events.p                                                    }
  47. {        OSUtils.p                                                }
  48. {    Controls.p                                                    }
  49. {        Menus.p                                                    }
  50.  
  51. {$IFC UNDEFINED __DIALOGS__}
  52. {$I Dialogs.p}
  53. {$ENDC}
  54. {    Errors.p                                                    }
  55. {    TextEdit.p                                                    }
  56.  
  57. {$IFC UNDEFINED __CMAPPLICATION__}
  58. {$I CMApplication.p}
  59. {$ENDC}
  60. {    Printing.p                                                    }
  61.  
  62. {$IFC UNDEFINED __BALLOONS__}
  63. {$I Balloons.p}
  64. {$ENDC}
  65.  
  66. {$PUSH}
  67. {$ALIGN MAC68K}
  68. {$LibExport+}
  69.  
  70. CONST
  71. {Maximum small fract value, as long}
  72.     MaxSmallFract                = $0000FFFF;
  73.  
  74.     kDefaultWidth                = 383;
  75.     kDefaultHeight                = 238;
  76.  
  77.     kDidNothing                    = 0;
  78.     kColorChanged                = 1;
  79.     kOkHit                        = 2;
  80.     kCancelHit                    = 3;
  81.     kNewPickerChosen            = 4;
  82.     kApplItemHit                = 5;
  83.  
  84.     
  85. TYPE
  86.     PickerAction = INTEGER;
  87.  
  88.  
  89. CONST
  90.     kOriginalColor                = 0;
  91.     kNewColor                    = 1;
  92.  
  93.     
  94. TYPE
  95.     ColorType = INTEGER;
  96.  
  97.  
  98. CONST
  99.     kCut                        = 0;
  100.     kCopy                        = 1;
  101.     kPaste                        = 2;
  102.     kClear                        = 3;
  103.     kUndo                        = 4;
  104.  
  105.     
  106. TYPE
  107.     EditOperation = INTEGER;
  108.  
  109.  
  110. CONST
  111.     kMouseDown                    = 0;
  112.     kKeyDown                    = 1;
  113.     kFieldEntered                = 2;
  114.     kFieldLeft                    = 3;
  115.     kCutOp                        = 4;
  116.     kCopyOp                        = 5;
  117.     kPasteOp                    = 6;
  118.     kClearOp                    = 7;
  119.     kUndoOp                        = 8;
  120.  
  121.     
  122. TYPE
  123.     ItemModifier = INTEGER;
  124.  
  125.  
  126. CONST
  127.     kAtSpecifiedOrigin            = 0;
  128.     kDeepestColorScreen            = 1;
  129.     kCenterOnMainScreen            = 2;
  130.  
  131.     
  132. TYPE
  133.     DialogPlacementSpec = INTEGER;
  134.  
  135.  
  136. CONST
  137.     DialogIsMoveable            = 1;
  138.     DialogIsModal                = 2;
  139.     CanModifyPalette            = 4;
  140.     CanAnimatePalette            = 8;
  141.     AppIsColorSyncAware            = 16;
  142.     InSystemDialog                = 32;
  143.     InApplicationDialog            = 64;
  144.     InPickerDialog                = 128;
  145.     DetachedFromChoices            = 256;
  146.     CanDoColor                    = 1;
  147.     CanDoBlackWhite                = 2;
  148.     AlwaysModifiesPalette        = 4;
  149.     MayModifyPalette            = 8;
  150.     PickerIsColorSyncAware        = 16;
  151.     CanDoSystemDialog            = 32;
  152.     CanDoApplDialog                = 64;
  153.     HasOwnDialog                = 128;
  154.     CanDetach                    = 256;
  155.  
  156.     kNoForcast                    = 0;
  157.     kMenuChoice                    = 1;
  158.     kDialogAccept                = 2;
  159.     kDialogCancel                = 3;
  160.     kLeaveFocus                    = 4;
  161.     kPickerSwitch                = 5;
  162.     kNormalKeyDown                = 6;
  163.     kNormalMouseDown            = 7;
  164.  
  165.     
  166. TYPE
  167.     EventForcaster = INTEGER;
  168.  
  169. { A SmallFract value is just the fractional part of a Fixed number,
  170. which is the low order word.  SmallFracts are used to save room,
  171. and to be compatible with Quickdraw's RGBColor.  They can be
  172. assigned directly to and from INTEGERs. }
  173. { Unsigned fraction between 0 and 1 }
  174.     SmallFract = INTEGER;
  175.  
  176. { For developmental simplicity in switching between the HLS and HSV
  177. models, HLS is reordered into HSL. Thus both models start with
  178. hue and saturation values; value/lightness/brightness is last. }
  179.     HSVColor = RECORD
  180.         hue:                    SmallFract;                                {Fraction of circle, red at 0}
  181.         saturation:                SmallFract;                                {0-1, 0 for gray, 1 for pure color}
  182.         value:                    SmallFract;                                {0-1, 0 for black, 1 for max intensity}
  183.     END;
  184.     HSLColor = RECORD
  185.         hue:                    SmallFract;                                {Fraction of circle, red at 0}
  186.         saturation:                SmallFract;                                {0-1, 0 for gray, 1 for pure color}
  187.         lightness:                SmallFract;                                {0-1, 0 for black, 1 for white}
  188.     END;
  189.     CMYColor = RECORD
  190.         cyan:                    SmallFract;
  191.         magenta:                SmallFract;
  192.         yellow:                    SmallFract;
  193.     END;
  194.     PMColor = RECORD
  195.         profile:                CMProfileHandle;
  196.         color:                    CMColor;
  197.     END;
  198.     PMColorPtr = ^PMColor;
  199.  
  200.     picker = Ptr;
  201.  
  202.     PickerIconData = RECORD
  203.         scriptCode:                INTEGER;
  204.         iconSuiteID:            INTEGER;
  205.         helpResType:            ResType;
  206.         helpResID:                INTEGER;
  207.     END;
  208.     PickerInitData = RECORD
  209.         pickerDialog:            DialogPtr;
  210.         choicesDialog:            DialogPtr;
  211.         flags:                    LONGINT;
  212.         yourself:                picker;
  213.     END;
  214. { This is the same structure as GX's gxEditMenuRecord.  Maybe use that?}
  215.     MenuItemInfo = RECORD
  216.         editMenuID:                INTEGER;
  217.         cutItem:                INTEGER;
  218.         copyItem:                INTEGER;
  219.         pasteItem:                INTEGER;
  220.         clearItem:                INTEGER;
  221.         undoItem:                INTEGER;
  222.     END;
  223.     MenuState = RECORD
  224.         cutEnabled:                BOOLEAN;
  225.         copyEnabled:            BOOLEAN;
  226.         pasteEnabled:            BOOLEAN;
  227.         clearEnabled:            BOOLEAN;
  228.         undoEnabled:            BOOLEAN;
  229.         undoString:                Str255;
  230.     END;
  231.     ColorChangedProcPtr = ProcPtr;  { PROCEDURE ColorChanged(userData: LONGINT; VAR newColor: PMColor); }
  232.     UserEventProcPtr = ProcPtr;  { FUNCTION UserEvent(VAR event: EventRecord): BOOLEAN; }
  233.     ColorChangedUPP = UniversalProcPtr;
  234.     UserEventUPP = UniversalProcPtr;
  235.  
  236.     ColorPickerInfo = RECORD
  237.         theColor:                PMColor;
  238.         dstProfile:                CMProfileHandle;
  239.         flags:                    LONGINT;
  240.         placeWhere:                DialogPlacementSpec;
  241.         dialogOrigin:            Point;
  242.         pickerType:                LONGINT;
  243.         eventProc:                UserEventUPP;
  244.         colorProc:                ColorChangedUPP;
  245.         colorProcData:            LONGINT;
  246.         prompt:                    Str255;
  247.         mInfo:                    MenuItemInfo;
  248.         newColorChosen:            BOOLEAN;
  249.         filler:                    SInt8;
  250.     END;
  251.     SystemDialogInfo = RECORD
  252.         flags:                    LONGINT;
  253.         pickerType:                LONGINT;
  254.         placeWhere:                DialogPlacementSpec;
  255.         dialogOrigin:            Point;
  256.         mInfo:                    MenuItemInfo;
  257.     END;
  258.     PickerDialogInfo = RECORD
  259.         flags:                    LONGINT;
  260.         pickerType:                LONGINT;
  261.         dialogOrigin:            ^Point;
  262.         mInfo:                    MenuItemInfo;
  263.     END;
  264.     ApplicationDialogInfo = RECORD
  265.         flags:                    LONGINT;
  266.         pickerType:                LONGINT;
  267.         theDialog:                DialogPtr;
  268.         pickerOrigin:            Point;
  269.         mInfo:                    MenuItemInfo;
  270.     END;
  271.     EventData = RECORD
  272.         event:                    ^EventRecord;
  273.         action:                    PickerAction;
  274.         itemHit:                INTEGER;
  275.         handled:                BOOLEAN;
  276.         filler:                    SInt8;
  277.         colorProc:                ColorChangedUPP;
  278.         colorProcData:            LONGINT;
  279.         forcast:                EventForcaster;
  280.     END;
  281.     EditData = RECORD
  282.         theEdit:                EditOperation;
  283.         action:                    PickerAction;
  284.         handled:                BOOLEAN;
  285.         filler:                    SInt8;
  286.     END;
  287.     ItemHitData = RECORD
  288.         itemHit:                INTEGER;
  289.         iMod:                    ItemModifier;
  290.         action:                    PickerAction;
  291.         colorProc:                ColorChangedUPP;
  292.         colorProcData:            LONGINT;
  293.         where:                    Point;
  294.     END;
  295.     HelpItemInfo = RECORD
  296.         options:                LONGINT;
  297.         tip:                    Point;
  298.         altRect:                Rect;
  299.         theProc:                INTEGER;
  300.         helpVariant:            INTEGER;
  301.         helpMessage:            HMMessageRecord;
  302.     END;
  303. {    Below are the color conversion routines.}
  304.  
  305. FUNCTION Fix2SmallFract(f: Fixed): SmallFract;
  306.     {$IFC NOT GENERATINGCFM}
  307.     INLINE $3F3C, $0001, $A82E;
  308.     {$ENDC}
  309. FUNCTION SmallFract2Fix(s: SmallFract): Fixed;
  310.     {$IFC NOT GENERATINGCFM}
  311.     INLINE $3F3C, $0002, $A82E;
  312.     {$ENDC}
  313. PROCEDURE CMY2RGB({CONST}VAR cColor: CMYColor; VAR rColor: RGBColor);
  314.     {$IFC NOT GENERATINGCFM}
  315.     INLINE $3F3C, $0003, $A82E;
  316.     {$ENDC}
  317. PROCEDURE RGB2CMY({CONST}VAR rColor: RGBColor; VAR cColor: CMYColor);
  318.     {$IFC NOT GENERATINGCFM}
  319.     INLINE $3F3C, $0004, $A82E;
  320.     {$ENDC}
  321. PROCEDURE HSL2RGB({CONST}VAR hColor: HSLColor; VAR rColor: RGBColor);
  322.     {$IFC NOT GENERATINGCFM}
  323.     INLINE $3F3C, $0005, $A82E;
  324.     {$ENDC}
  325. PROCEDURE RGB2HSL({CONST}VAR rColor: RGBColor; VAR hColor: HSLColor);
  326.     {$IFC NOT GENERATINGCFM}
  327.     INLINE $3F3C, $0006, $A82E;
  328.     {$ENDC}
  329. PROCEDURE HSV2RGB({CONST}VAR hColor: HSVColor; VAR rColor: RGBColor);
  330.     {$IFC NOT GENERATINGCFM}
  331.     INLINE $3F3C, $0007, $A82E;
  332.     {$ENDC}
  333. PROCEDURE RGB2HSV({CONST}VAR rColor: RGBColor; VAR hColor: HSVColor);
  334.     {$IFC NOT GENERATINGCFM}
  335.     INLINE $3F3C, $0008, $A82E;
  336.     {$ENDC}
  337. {    Below brings up the ColorPicker 1.0 Dialog}
  338. FUNCTION GetColor(where: Point; prompt: ConstStr255Param; {CONST}VAR inColor: RGBColor; VAR outColor: RGBColor): BOOLEAN;
  339.     {$IFC NOT GENERATINGCFM}
  340.     INLINE $3F3C, $0009, $A82E;
  341.     {$ENDC}
  342. {    Below are the ColorPicker 2.0 routines.}
  343. FUNCTION PickColor(VAR theColorInfo: ColorPickerInfo): OSErr;
  344.     {$IFC NOT GENERATINGCFM}
  345.     INLINE $3F3C, $0213, $A82E;
  346.     {$ENDC}
  347. FUNCTION AddPickerToDialog(VAR info: ApplicationDialogInfo; VAR thePicker: picker): OSErr;
  348.     {$IFC NOT GENERATINGCFM}
  349.     INLINE $3F3C, $0414, $A82E;
  350.     {$ENDC}
  351. FUNCTION CreateColorDialog(VAR info: SystemDialogInfo; VAR thePicker: picker): OSErr;
  352.     {$IFC NOT GENERATINGCFM}
  353.     INLINE $3F3C, $0415, $A82E;
  354.     {$ENDC}
  355. FUNCTION CreatePickerDialog(VAR info: PickerDialogInfo; VAR thePicker: picker): OSErr;
  356.     {$IFC NOT GENERATINGCFM}
  357.     INLINE $3F3C, $0416, $A82E;
  358.     {$ENDC}
  359. FUNCTION DisposeColorPicker(thePicker: picker): OSErr;
  360.     {$IFC NOT GENERATINGCFM}
  361.     INLINE $3F3C, $0217, $A82E;
  362.     {$ENDC}
  363. FUNCTION GetPickerVisibility(thePicker: picker; VAR visible: BOOLEAN): OSErr;
  364.     {$IFC NOT GENERATINGCFM}
  365.     INLINE $3F3C, $0418, $A82E;
  366.     {$ENDC}
  367. FUNCTION SetPickerVisibility(thePicker: picker; visible: INTEGER): OSErr;
  368.     {$IFC NOT GENERATINGCFM}
  369.     INLINE $3F3C, $0319, $A82E;
  370.     {$ENDC}
  371. FUNCTION SetPickerPrompt(thePicker: picker; VAR promptString: Str255): OSErr;
  372.     {$IFC NOT GENERATINGCFM}
  373.     INLINE $3F3C, $041a, $A82E;
  374.     {$ENDC}
  375. FUNCTION DoPickerEvent(thePicker: picker; VAR data: EventData): OSErr;
  376.     {$IFC NOT GENERATINGCFM}
  377.     INLINE $3F3C, $041b, $A82E;
  378.     {$ENDC}
  379. FUNCTION DoPickerEdit(thePicker: picker; VAR data: EditData): OSErr;
  380.     {$IFC NOT GENERATINGCFM}
  381.     INLINE $3F3C, $041c, $A82E;
  382.     {$ENDC}
  383. FUNCTION DoPickerDraw(thePicker: picker): OSErr;
  384.     {$IFC NOT GENERATINGCFM}
  385.     INLINE $3F3C, $021d, $A82E;
  386.     {$ENDC}
  387. FUNCTION GetPickerColor(thePicker: picker; whichColor: ColorType; VAR color: PMColor): OSErr;
  388.     {$IFC NOT GENERATINGCFM}
  389.     INLINE $3F3C, $051e, $A82E;
  390.     {$ENDC}
  391. FUNCTION SetPickerColor(thePicker: picker; whichColor: ColorType; VAR color: PMColor): OSErr;
  392.     {$IFC NOT GENERATINGCFM}
  393.     INLINE $3F3C, $051f, $A82E;
  394.     {$ENDC}
  395. FUNCTION GetPickerOrigin(thePicker: picker; VAR where: Point): OSErr;
  396.     {$IFC NOT GENERATINGCFM}
  397.     INLINE $3F3C, $0420, $A82E;
  398.     {$ENDC}
  399. FUNCTION SetPickerOrigin(thePicker: picker; where: Point): OSErr;
  400.     {$IFC NOT GENERATINGCFM}
  401.     INLINE $3F3C, $0421, $A82E;
  402.     {$ENDC}
  403. FUNCTION GetPickerProfile(thePicker: picker; VAR profile: CMProfileHandle): OSErr;
  404.     {$IFC NOT GENERATINGCFM}
  405.     INLINE $3F3C, $0422, $A82E;
  406.     {$ENDC}
  407. FUNCTION SetPickerProfile(thePicker: picker; profile: CMProfileHandle): OSErr;
  408.     {$IFC NOT GENERATINGCFM}
  409.     INLINE $3F3C, $0423, $A82E;
  410.     {$ENDC}
  411. FUNCTION GetPickerEditMenuState(thePicker: picker; VAR mState: MenuState): OSErr;
  412.     {$IFC NOT GENERATINGCFM}
  413.     INLINE $3F3C, $0424, $A82E;
  414.     {$ENDC}
  415. FUNCTION ExtractPickerHelpItem(thePicker: picker; itemNo: INTEGER; whichState: INTEGER; VAR helpInfo: HelpItemInfo): OSErr;
  416.     {$IFC NOT GENERATINGCFM}
  417.     INLINE $3F3C, $0625, $A82E;
  418.     {$ENDC}
  419. CONST
  420.     uppColorChangedProcInfo = $000003C0; { PROCEDURE (4 byte param, 4 byte param); }
  421.     uppUserEventProcInfo = $000000D0; { FUNCTION (4 byte param): 1 byte result; }
  422.  
  423. FUNCTION NewColorChangedProc(userRoutine: ColorChangedProcPtr): ColorChangedUPP;
  424.     {$IFC NOT GENERATINGCFM }
  425.     INLINE $2E9F;
  426.     {$ENDC}
  427.  
  428. FUNCTION NewUserEventProc(userRoutine: UserEventProcPtr): UserEventUPP;
  429.     {$IFC NOT GENERATINGCFM }
  430.     INLINE $2E9F;
  431.     {$ENDC}
  432.  
  433. PROCEDURE CallColorChangedProc(userData: LONGINT; VAR newColor: PMColor; userRoutine: ColorChangedUPP);
  434.     {$IFC NOT GENERATINGCFM}
  435.     INLINE $205F, $4E90;
  436.     {$ENDC}
  437.  
  438. FUNCTION CallUserEventProc(VAR event: EventRecord; userRoutine: UserEventUPP): BOOLEAN;
  439.     {$IFC NOT GENERATINGCFM}
  440.     INLINE $205F, $4E90;
  441.     {$ENDC}
  442.  
  443. {$ALIGN RESET}
  444. {$POP}
  445.  
  446. {$SETC UsingIncludes := ColorPickerIncludes}
  447.  
  448. {$ENDC} {__COLORPICKER__}
  449.  
  450. {$IFC NOT UsingIncludes}
  451.  END.
  452. {$ENDC}
  453.